// 初始化管理员用户脚本
const bcrypt = require('bcryptjs')
const { User } = require('../models')

// 加密密码的盐值轮数
const SALT_ROUNDS = 10

/**
 * 创建默认管理员用户
 */
async function createAdminUser() {
  try {
    // 检查是否已存在管理员用户
    const existingAdmin = await User.findOne({
      where: { role: 'admin' },
    })

    if (existingAdmin) {
      console.log('管理员用户已存在，无需创建')
      return
    }

    // 创建管理员用户
    const adminData = {
      username: 'admin',
      password: await bcrypt.hash('admin123', SALT_ROUNDS), // 默认密码
      role: 'admin',
      status: 'active',
    }

    await User.create(adminData)
    console.log('管理员用户创建成功！用户名: admin, 密码: admin123')
  } catch (error) {
    console.error('创建管理员用户失败:', error)
  }
}

// 创建交通管理部门用户
async function createTrafficUser() {
  try {
    // 检查是否已存在交通管理用户
    const existingTraffic = await User.findOne({
      where: { role: 'traffic' },
    })

    if (existingTraffic) {
      console.log('交通管理用户已存在，无需创建')
      return
    }
    // 创建交通管理用户
    const trafficData = {
      username: 'traffic',
      password: await bcrypt.hash('traffic123', SALT_ROUNDS), // 默认密码
      role: 'traffic',
      status: 'active',
    }
    await User.create(trafficData)
    console.log('交通管理用户创建成功！用户名: traffic, 密码: traffic123')
  } catch (error) {
    console.error('创建交通管理用户失败:', error)
  }
}

// 创建普通测试用户
async function createTestUser() {
  try {
    // 检查是否已存在测试用户
    const existingUser = await User.findOne({
      where: { username: 'test' },
    })

    if (existingUser) {
      console.log('测试用户已存在，无需创建')
      return
    }

    // 创建测试用户
    const userData = {
      username: 'test',
      password: await bcrypt.hash('test123', SALT_ROUNDS), // 默认密码
      role: 'normal',
      status: 'active',
    }

    await User.create(userData)
    console.log('测试用户创建成功！用户名: test, 密码: test123')
  } catch (error) {
    console.error('创建测试用户失败:', error)
  }
}

// 初始化所有默认用户
async function initDefaultUsers() {
  try {
    console.log('开始初始化默认用户...')

    await createAdminUser()
    await createTrafficUser()
    await createTestUser()

    console.log('默认用户初始化完成！')
    console.log('--------------------------------')
    console.log('可用的默认账号：')
    console.log('管理员账号: admin / admin123')
    console.log('交管部门账号: traffic / traffic123')
    console.log('测试账号: test / test123')
    console.log('--------------------------------')
  } catch (error) {
    console.error('初始化默认用户失败:', error)
  } finally {
    process.exit()
  }
}

// 执行初始化
initDefaultUsers()
